package red_packet

import (
	"wx-uniapp-go/internal/repository/dto"
	"wx-uniapp-go/internal/server/ctxop"
	"wx-uniapp-go/internal/server/echo"
	"wx-uniapp-go/internal/service"

	"github.com/gin-gonic/gin"
)

// GetAccount 获取红包账户信息
func GetAccount(c *gin.Context) {
	ctx := echo.TraceCtx(c)
	userId := ctxop.GetUser(ctx).Id
	resp, err := service.NewRedPacketService().GetAccount(ctx, userId)
	if err != nil {
		echo.Fail(c).Error(err)
		return
	}
	echo.Success(c, resp)
}

// ListRecords 获取红包流水记录列表
func ListRecords(c *gin.Context) {
	var req dto.ListRedPacketRecordReq
	if err := c.ShouldBindQuery(&req); err != nil {
		echo.Fail(c).Error(err)
		return
	}

	ctx := echo.TraceCtx(c)
	userId := ctxop.GetUser(ctx).Id
	resp, err := service.NewRedPacketService().ListRecords(ctx, userId, &req)
	if err != nil {
		echo.Fail(c).Error(err)
		return
	}
	echo.Success(c, resp)
}

// UseRedPacket 使用红包
func UseRedPacket(c *gin.Context) {
	var req dto.UseRedPacketReq
	if err := c.ShouldBindJSON(&req); err != nil {
		echo.Fail(c).Error(err)
		return
	}

	ctx := echo.TraceCtx(c)
	userId := ctxop.GetUser(ctx).Id
	if err := service.NewRedPacketService().UseRedPacket(ctx, userId, &req); err != nil {
		echo.Fail(c).Error(err)
		return
	}
	echo.Success(c, nil)
}

// RefundRedPacket 退回红包
func RefundRedPacket(c *gin.Context) {
	var req dto.RefundRedPacketReq
	if err := c.ShouldBindJSON(&req); err != nil {
		echo.Fail(c).Error(err)
		return
	}

	ctx := echo.TraceCtx(c)
	userId := ctxop.GetUser(ctx).Id
	if err := service.NewRedPacketService().RefundRedPacket(ctx, userId, &req); err != nil {
		echo.Fail(c).Error(err)
		return
	}
	echo.Success(c, nil)
}

// SendRedPacket 发放红包
func SendRedPacket(c *gin.Context) {
	var req dto.SendRedPacketReq
	if err := c.ShouldBindJSON(&req); err != nil {
		echo.Fail(c).Error(err)
		return
	}

	ctx := echo.TraceCtx(c)
	resp, err := service.NewRedPacketService().SendRedPacket(ctx, &req)
	if err != nil {
		echo.Fail(c).Error(err)
		return
	}
	echo.Success(c, resp)
}
